# 2025.08.29力扣网刷题
# 删除子串后的字符串最小长度——栈、字符串、模拟、第 346 场周赛——简单
# 给你一个仅由 大写 英文字符组成的字符串 s 。
# 你可以对此字符串执行一些操作，在每一步操作中，你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。
# 通过执行操作，删除所有 "AB" 和 "CD" 子串，返回可获得的最终字符串的 最小 可能长度。
# 注意，删除子串后，重新连接出的字符串可能会产生新的 "AB" 或 "CD" 子串。
# 示例 1：
# 输入：s = "ABFCACDB"
# 输出：2
# 解释：你可以执行下述操作：
# - 从 "ABFCACDB" 中删除子串 "AB"，得到 s = "FCACDB" 。
# - 从 "FCACDB" 中删除子串 "CD"，得到 s = "FCAB" 。
# - 从 "FCAB" 中删除子串 "AB"，得到 s = "FC" 。
# 最终字符串的长度为 2 。
# 可以证明 2 是可获得的最小长度。
# 示例 2：
# 输入：s = "ACBBD"
# 输出：5
# 解释：无法执行操作，字符串长度不变。
# 提示：
# 1 <= s.length <= 100
# s 仅由大写英文字母组成

class Solution(object):
    def minLength(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = len(s)
        ans = ''
        ret = 0
        for i in range(length):
            ans += s[i]
            ret += 1
            if 'AB' in ans:
                ans = ans[:ret - 1]
                ret -= 2
            elif 'CD' in ans:
                ans = ans[:ret - 1]
                ret -= 2
        return ret
